home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Portable Patmos 1.1 / patmos-src / src / ioctl.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-19  |  1.7 KB  |  86 lines  |  [TEXT/KAHL]

  1. #include "crtlocal.h"
  2. #include <sys/ioctl.h>
  3. #include <sys/termios.h>
  4. #include <stdarg.h>
  5. #include <stdio.h>
  6.  
  7. int    ioctl __P((int fd, unsigned long cmd, ...))
  8.     {
  9.     va_list ap;
  10.     void *structure;
  11.     va_start(ap, cmd);
  12.     structure = va_arg(ap, void *);
  13. #if DEBUG
  14.     kprintf("ioctl fd=%d\n", fd);
  15.     kprintf("ioctl base cmd=%X\n", cmd&255);
  16.     kprintf("ioctl addr=%X, size = %d\n", (long)structure, IOCPARM_LEN(cmd));
  17.     if (cmd&IOC_IN) kprintf("ioctl in\n");
  18. #endif
  19.     if (cmd&IOC_OUT)
  20.         {
  21.         memset(structure, 0, IOCPARM_LEN(cmd));
  22. #if DEBUG
  23.         kprintf("ioctl out\n");
  24. #endif
  25.         }
  26.     va_end(cmd);
  27.     switch(IOCGROUP(cmd))
  28.         {
  29.         case 't':
  30.             switch(cmd&255)
  31.                 {
  32.                 case 0: return -1;
  33.                 case 8:
  34.                     return -1;
  35.                 case 13: /* Set exclusive TTY use */; return 0;
  36.                 case 14: /* Clear exclusive TTY use */; return 0;
  37.                 case 18:
  38.                     return -1;
  39.                 case 19:
  40.                     {
  41.                     struct termios *term = structure;
  42.                     if ((crt_fd_tab[fd].fd&-256) == 100<<8)
  43.                         {
  44.                         /* just return dummy data */
  45.                         term->c_ispeed = term->c_ospeed = B9600; 
  46.                         return 0;
  47.                         }
  48.                     return -1;
  49.                     break;
  50.                     }
  51.                 case 21:    /* drain output */
  52.                     {
  53.                     return 0;
  54.                     }
  55.                 case 104:
  56.                     {
  57.                     struct winsize *ws = structure;
  58.                     ws->ws_row = 25;
  59.                     ws->ws_col = 80;
  60.                     ws->ws_xpixel = 640;
  61.                     ws->ws_ypixel = 400;
  62.                     return 0;
  63.                     }
  64.                 case 110: /* start output */
  65.                     {
  66.                     return 0;
  67.                     }
  68.                 case 116:
  69.                     return -1;
  70.                 case 118: return -1;
  71.                 case 119:
  72.                     *(long *)structure = 12345;
  73.                     return 0;
  74.                 case 124:
  75.                     return -1;
  76.                 default: kprintf("Unsupported TTY ioctl %d\n", cmd&255);
  77.                     return 0;
  78.                 }
  79.             break;
  80.         default: 
  81.             kprintf("ioctl group='%c' unsupported\n", IOCGROUP(cmd));
  82.         }
  83.     return -1;
  84.     }
  85.  
  86.